ummmm....终于又AC了一题.....ummmmm
数论不好,暂时还没搞清楚网上的方法互质,我的就是ummm暴力出奇迹,暴搜挂着机,题目意思MOD-1出MOD-1个不重复不为0数字那么就弄个bool数组来....保存是否已经被记录,被记录直接出来失败,如果没有继续按照公式搜索......
# include<iostream>
#include <iomanip>
using namespace std;
bool IS_OK[1000000] = {false };//标记到100W个MOD
int main(void) {
//Each line of input will contain a pair of integers for STEP and MOD in that order (1 <= STEP, MOD <= 100000).
int STEP, MOD;
int seed = 0;
IS_OK[0] = true;
int index = 0;
while (cin >> STEP >> MOD) {
seed = 0;
for (index = 0; index < MOD - 1; ++index) {
seed = (seed + STEP) % MOD;
if (!IS_OK[seed]) //在MOD-1 步之内要出MOD-1个不一样的数,既然有了相同的肯定完蛋了
IS_OK[seed] = true;
else
break;
}//数据迭代检查
if (index == MOD - 1) {//判断迭代是否是break出来的
for (index = 0; index < MOD - 1; index++) {
if (!IS_OK[index])
break;
}//检查是否有false
}
//判断检查是否是break出来的
cout << setw(10) << STEP << setw(10) << MOD << " ";
cout << ((index == MOD - 1 )? "Good Choice" : "Bad Choice");
cout << endl << endl;
//初始化判断IS_OK
for (index = 1; index < MOD; ++index) {
IS_OK[index] = false;
}
}
system("pause");
return 0;
}